package cn.cjxy.springboot_zonghe_practice.mapper;

import cn.cjxy.springboot_zonghe_practice.domain.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import cn.cjxy.springboot_zonghe_practice.domain.EmployeeVO;


public interface EmpMapper {
    // 根据部门ID查询员工数量
    Integer selectEmpByDeptId(Long id);
    
    // 添加员工
    int addEmployee(Employee employee);
    
    // 修改员工
    int updateEmployee(Employee employee);
    
    // 删除员工
    int deleteEmployeeById(Long id);
    
    // 根据ID查询员工
    Employee selectEmployeeById(Long id);
    
    // 分页查询员工
    List<Employee> selectEmployeeByPage(@Param("start") int start, @Param("pageSize") int pageSize);
    
    // 查询员工总数
    Integer selectEmployeeCount();
    
    // 批量添加员工
    int batchAddEmployee(List<Employee> employees);
    
    // 批量删除员工
    int batchDeleteEmployee(List<Long> ids);
    
    // 根据身份证查询员工数量
    Integer selectEmployeeByIdCard(String idCard);
    
    // 根据身份证查询员工数量（排除指定ID）
    Integer selectEmployeeByIdCardAndNotId(@Param("idCard") String idCard, @Param("id") Long id);
    
    // 根据手机号查询员工数量
    Integer selectEmployeeByPhone(String phone);
    
    // 根据手机号查询员工数量（排除指定ID）
    Integer selectEmployeeByPhoneAndNotId(@Param("phone") String phone, @Param("id") Long id);
    
    // 根据部门ID查询员工列表
    List<Employee> selectEmployeeByDeptId(Long deptId);
    
    // 统计各部门人数
    List<Map<String, Object>> selectDeptEmployeeCount();
    
    // 统计各部门最高薪水员工
    List<Map<String, Object>> selectDeptMaxSalaryEmployee();
    
    // 统计各部门薪水总和
    List<Map<String, Object>> selectDeptTotalSalary();

    // 新增：分页查询员工（含部门名）
    List<EmployeeVO> selectEmployeeVOByPage(@Param("start") int start, @Param("pageSize") int pageSize);
}
